home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / tpl60n19.zip / TESTPRGS.ZIP / LLL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-02-14  |  13KB  |  477 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N+,O-,R-,S-,V-,X-}
  2. {$M 16384,0,655360}
  3.  
  4. {    LAWRENCE LIVERMORE LOOPS (LLL) }
  5.  
  6. {    PORTED TO TURBO-PASCAL 5.0 AND ENHANCED TO ALLOW FOR VARIABLE
  7.      LOOPING 89-05-27 BY N.J.
  8.  
  9. ***********************************************************************
  10.  
  11.      PROGRAM ANALYSIS EVALUATES EXECUTION RATES OF PASCAL FOR-LOOPS.
  12.      THROUGH-PUT IS MEASURED IN UNITS OF MILLIONS OF FLOATING-POINT
  13.      OPERATIONS PER SECOND, CALLED MFLOPS.
  14.  
  15.  
  16. ***********************************************************************
  17.  
  18. ***********************************************************************}
  19.  
  20. PROGRAM LLL;
  21.  
  22. USES Time;
  23.  
  24. CONST REPS = 10;
  25.  
  26.  
  27. VAR
  28.  
  29. NT,IR,IX,IZ13,IZ14,IP,
  30. I1,J1,I2,J2,NL1,NL2,
  31. I,J,K,L,M,K1,KX,KY,LW,
  32. IT1:                     LONGINT;
  33. S,RI,XI,DU1,DU2,DU3,
  34. Q,R,T,A11,A12,A13,
  35. SIG,A21,A22,A23,A31,
  36. A32,A33,BM28,BM27,
  37. AR,BR,CR,BM26,BM25,BM24,
  38. BM23,BM22,C0,FLX,RX1:    DOUBLE;
  39. IDT,MOPS:                ARRAY [1..20] OF LONGINT;
  40. RT,RPM:                  ARRAY [1..20] OF DOUBLE;
  41. X,Y,Z,U:                 ARRAY [1..1000] OF DOUBLE;
  42. PX,CX:                   ARRAY [1..15,1..100] OF DOUBLE ABSOLUTE Z;
  43. U1,U2,U3:                ARRAY [1..22,1..5,1..2] OF DOUBLE;
  44. B,C,H:                   ARRAY [1..64,1..8] OF DOUBLE;
  45. BNK1,BNK2,BNK3,BNK4,BNK5:ARRAY [1..5] OF DOUBLE;
  46. P:                       ARRAY [1..4,1..512] OF DOUBLE ABSOLUTE X;
  47. E,F:                     ARRAY [1..192] OF LONGINT;
  48. EX,RH,DEX:               ARRAY [1..67] OF DOUBLE;
  49. VX,XX:                   ARRAY [1..150] OF DOUBLE;
  50.  
  51. CONST
  52.  
  53. NROPS: ARRAY [1..20] OF LONGINT =
  54.        (5,10,2,3,2,3,16,36,17,9,1,1,7,11,0,0,0,0,0,0);
  55. LOOPS: ARRAY [1..20] OF LONGINT =
  56.        (400,200,1000,343,996,996,120,40,100,100,999,999,128,150,0,0,0,0,0,0);
  57.  
  58.  
  59. {***********************************************************************}
  60.  
  61. BEGIN
  62.  
  63.    WRITELN ('-- LAWRENCE LIVERMORE LOOPS --');
  64.    WRITELN;
  65.  
  66.    FOR K := 1 TO 1000 DO BEGIN
  67.       U[K] := 0.00025;
  68.       X[K] := 1.11;
  69.       Y[K] := 1.123;
  70.       Z[K] := 0.321;
  71.    END;
  72.  
  73.    FOR J := 1 TO 22 DO BEGIN
  74.       FOR K := 1 TO 5 DO BEGIN
  75.          FOR L := 1 TO 2 DO BEGIN
  76.             U1[J,K,L] := K;
  77.             U2[J,K,L] := K + K;
  78.             U3[J,K,L] := K + K + K;
  79.          END;
  80.       END;
  81.    END;
  82.  
  83.  
  84.    FOR J := 1 TO 64 DO BEGIN
  85.       FOR K := 1 TO 8 DO BEGIN
  86.          B[J,K] := 1.00025;
  87.          C[J,K] := 1.00025;
  88.          H[J,K] := 1.00025;
  89.       END;
  90.    END;
  91.  
  92.    FOR J := 1 TO 5 DO BEGIN
  93.       BNK1[J] := J*100;
  94.       BNK2[J] := J*110;
  95.       BNK3[J] := J*120;
  96.       BNK4[J] := J*130;
  97.       BNK5[J] := J*140;
  98.    END;
  99.  
  100.    FOR J := 1 TO 192 DO BEGIN
  101.       E[J] := 1;
  102.       F[J] := 1;
  103.    END;
  104.  
  105.  
  106.    FOR J := 1 TO 67 DO BEGIN
  107.       EX[J] := J;
  108.       RH[J] := J;
  109.       DEX[J]:= J;
  110.    END;
  111.  
  112.    FOR J := 1 TO 150 DO BEGIN
  113.       VX[J] := 0.001;
  114.       XX[J] := 0.001;
  115.    END;
  116.  
  117.    R := 4.86;
  118.    T := 276.0;
  119.    A11 := 0.5;
  120.    A12 := 0.33;
  121.    A13 := 0.25;
  122.    SIG := 0.8;
  123.    A21 := 0.20;
  124.    A22 := 0.167;
  125.    A23 := 0.141;
  126.    A31 := 0.125;
  127.    A32 := 0.111;
  128.    A33 := 0.10;
  129.    BM28 := 0.1;
  130.    BM27 := 0.2;
  131.    BM26 := 0.3;
  132.    BM25 := 0.4;
  133.    BM24 := 0.5;
  134.    BM23 := 0.6;
  135.    BM22 := 0.7;
  136.    C0 := 0.8;
  137.    FLX := 4.689;
  138.    RX1 := 64.0;
  139.  
  140. {********************************************************************
  141.  
  142.      END OF INITIALIZATION--BEGIN TIMING
  143.  
  144. {********************************************************************}
  145.  
  146. {*** LOOP 1    HYDRO EXCERPT }
  147.  
  148.       IT1 := CLOCK;
  149.       FOR K1 := 1 TO REPS DO BEGIN
  150.          Q := 0.0;
  151.          I := 10;
  152.          FOR K := 1 TO 400 DO BEGIN
  153.             X[K] := Q+Y[K]*(R*Z[K+I]+T*Z[K+I+1]);
  154.          END;
  155.       END;
  156.       IDT[1] := CLOCK - IT1;
  157.  
  158. {*********************************************************************}
  159.  
  160. {*** LOOP2     MLR, INNER PRODUCT }
  161.  
  162.       IT1 := CLOCK;
  163.       FOR K1 := 1 TO REPS DO BEGIN
  164.          Q := 0.0;
  165.          K := 1;
  166.          WHILE K <= 996 DO BEGIN
  167.             Q := Q+Z[K  ]*X[K  ]+Z[K+1]*X[K+1]
  168.                   +Z[K+2]*X[K+2]+Z[K+3]*X[K+3]
  169.                   +Z[K+4]*X[K+4];
  170.             INC (K,5);
  171.          END;
  172.       END;
  173.       IDT [2] := CLOCK - IT1;
  174.  
  175. {*********************************************************************}
  176.  
  177. {*** LOOP 3    INNER PROD }
  178.  
  179.       IT1 := CLOCK;
  180.       FOR K1 := 1 TO REPS DO BEGIN
  181.          Q := 0.0;
  182.          FOR K := 1 TO 1000 DO BEGIN
  183.             Q := Q+Z[K]*X[K];
  184.          END;
  185.       END;
  186.       IDT[3] := CLOCK - IT1;
  187.  
  188. {*********************************************************************}
  189.  
  190. {*** LOOP 4    BANDED LINEAR EQUATIONS }
  191.  
  192.       IT1 := CLOCK;
  193.       FOR K1 := 1 TO REPS DO BEGIN
  194.          L := 7;
  195.          WHILE L <= 107 DO BEGIN
  196.             LW := L;
  197.             J := 30;
  198.             WHILE J <= 870 DO BEGIN
  199.                X[L-1] := X[L-1] - X[LW]*Y[J];
  200.                INC (J,5);
  201.                INC (LW);
  202.             END;
  203.             X[L-1] := Y[5]*X[L-1];
  204.             INC (L,50);
  205.          END;
  206.       END;
  207.       IDT[4] := CLOCK - IT1;
  208.  
  209. {*********************************************************************}
  210.  
  211. {*** LOOP5 }
  212.  
  213.       IT1 := CLOCK;
  214.       FOR K1 := 1 TO REPS DO BEGIN
  215.          I := 2;
  216.          WHILE I <= 997 DO BEGIN
  217.             X[I  ] := Z[I  ]*(Y[I  ]-X[I-1]);
  218.             X[I+1] := Z[I+1]*(Y[I+1]-X[I  ]);
  219.             X[I+2] := Z[I+2]*(Y[I+2]-X[I+1]);
  220.             INC (I,3);
  221.          END;
  222.       END;
  223.       IDT[5] := CLOCK - IT1;
  224.  
  225. {*********************************************************************}
  226.  
  227. {*** LOOP6     TRI-DIAGONAL ELIMINATION, ABOVE DIAGONAL }
  228.  
  229.       IT1 := CLOCK;
  230.       FOR K1 := 1 TO REPS DO BEGIN
  231.          J := 3;
  232.          WHILE J <= 997 DO BEGIN
  233.             I := 1000-J;
  234.             X[I  ] := X[I  ]-Z[I  ]*X[I+1];
  235.             X[I-1] := X[I-1]-Z[I-1]*X[I  ];
  236.             X[I-2] := X[I-2]-Z[I-2]*X[I-1];
  237.             INC (J,3);
  238.          END;
  239.  
  240. { THE FOLLOWING LOOP HAS BEEN INSERTED AT THE UNIVERSITY
  241.   OF COLOGNE, BECAUSE IN THE ORIGINAL VERSION LOOP 6 ABORTED
  242.   WITH EXPONENT OVERFLOW ON IBM SYSTEMS. }
  243.  
  244.          FOR J := 2 TO 997 DO BEGIN
  245.             X[J]:=X[J]*0.6666;
  246.          END;
  247.  
  248.       END;
  249.  
  250.       IDT[6] := CLOCK - IT1;
  251.  
  252. {*********************************************************************}
  253.  
  254. {*** LOOP7     EQUATION OF STATE EXCERPT }
  255.  
  256.       IT1 := CLOCK;
  257.       FOR K1 := 1 TO REPS DO BEGIN
  258.          FOR M := 1 TO 120 DO BEGIN
  259.             X[M] :=    U[M  ] + R*(Z[M  ] + R*Y[M  ])
  260.                    +T*(U[M+3] + R*(U[M+2] + R*U[M+1])
  261.                    +T*(U[M+6] + R*(U[M+5] + R*U[M+4])));
  262.          END;
  263.       END;
  264.       IDT[7] := CLOCK - IT1;
  265.  
  266. {*********************************************************************}
  267.  
  268. {*** LOOP 8    P.D.E INTEGRATION }
  269.  
  270.       IT1 := CLOCK;
  271.       NL1 := 1;
  272.       NL2 := 2;
  273.       FOR K1 := 1 TO REPS DO BEGIN
  274.          FOR KX := 2 TO 3 DO BEGIN
  275.             FOR KY := 2 TO 21 DO BEGIN
  276.                DU1 := U1[KY+1,KX,NL1] - U1[KY-1,KX,NL1];
  277.                DU2 := U2[KY+1,KX,NL1] - U2[KY-1,KX,NL1];
  278.                DU3 := U3[KY+1,KX,NL1] - U3[KY-1,KX,NL1];
  279.                U1[KY,KX,NL2] := U1[KY,KX,NL1] + A11*DU1+A12*DU2 + A13*DU3 +
  280.                  SIG*(U1[KY,KX+1,NL1] - 2.*U1[KY,KX,NL1]+U1[KY,KX-1,NL1]);
  281.                U2[KY,KX,NL2] := U2[KY,KX,NL1] + A21*DU1+A22*DU2 + A23*DU3 +
  282.                  SIG*(U2[KY,KX+1,NL1] - 2.*U2[KY,KX,NL1]+U2[KY,KX-1,NL1]);
  283.                U3[KY,KX,NL2] := U3[KY,KX,NL1] + A31*DU1+A32*DU2 + A33*DU3 +
  284.                  SIG*(U3[KY,KX+1,NL1] - 2.*U3[KY,KX,NL1]+U3[KY,KX-1,NL1]);
  285.             END;
  286.          END;
  287.       END;
  288.       IDT[8] := CLOCK - IT1;
  289.  
  290. {*********************************************************************}
  291.  
  292. {*** LOOP 9    INTEGRATE PREDICTORS }
  293.  
  294.       FOR K := 1 TO 15 DO BEGIN
  295.          FOR L := 1 TO 100 DO BEGIN
  296.             PX[K,L] := L;
  297.             CX[K,L] := L;
  298.          END;
  299.       END;
  300.  
  301.       IT1 := CLOCK;
  302.       FOR K1 := 1 TO REPS DO BEGIN
  303.          FOR I := 1 TO 100 DO BEGIN
  304.             PX[1,I] := BM28*PX[13,I] + BM27*PX[12,I] + BM26*PX[11,I] +
  305.                        BM25*PX[10,I] + BM24*PX[9,I] + BM23*PX[8,I] +
  306.                        BM22*PX[7,I] + C0